// 文件名：unordered_map_word_count.cpp
// 目的：统计文本中每个单词的出现次数，使用 unordered_map 作为词频表。
// 要点：
//   - 通过 istringstream 将字符串切分为单词流；
//   - 词频表 counts：key 为单词，value 为计数；
//   - 预留容量 counts.reserve(64) 以减少哈希表扩容开销；
//   - 对每个单词执行 ++counts[word]，不存在时默认值 0 并插入后自增。
// 复杂度：
//   - 平均时间：O(T)（T 为单词数），每次插入/查找均摊 O(1)；
//   - 空间：O(U)（U 为不同单词数量）。
// 注意：
//   - 简化示例未处理大小写归一/标点过滤/Unicode 分词；实际应用需先进行规范化处理。

#include <iostream>
#include <sstream>
#include <string>
#include <unordered_map>

int main() {
    std::string text =
        "to be or not to be that is the question "
        "whether tis nobler in the mind to suffer";

    std::unordered_map<std::string, std::size_t> counts;
    counts.reserve(64); // 预估容量，减少重哈希

    std::istringstream iss(text);
    std::string word;
    while (iss >> word) {
        ++counts[word]; // 若不存在则插入后计数为 1
    }

    std::cout << "Word frequencies:\n";
    for (const auto& [token, freq] : counts) {
        std::cout << "  " << token << " -> " << freq << '\n';
    }

    return 0;
}